package com.dong.Arrays.arithemtic;
/*
给你一个数组 nums 和一个值 val，你需要原地移除所有数值等于 val 的元素，并返回移除后数组的新长度。
双指针法：
    双指针法（快慢指针法）： 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
    快指针指向当前将要处理的元素，慢指针指向下一个将要赋值的位置。
    重点：数组传递是引用传递（地址传递）,所以调用函数里面改变值时其他地方也会跟着变

 */
import java.util.Arrays;
public class Demo3Correct {
    public static void main(String[] args) {
        int [] nums = {0,1,2,2,3,0,4,2};
        int val = 2;
        Demo3Correct s = new Demo3Correct();
        int i = s.removeElement(nums, val);
        System.out.println(i);
        System.out.println(Arrays.toString(nums)); //[0, 1, 3, 0, 4, 0, 4, 2]

    }

    public int removeElement(int[] nums, int val) {
        int n = nums.length;
        int slowIndex = 0;
        for (int fastIndex = 0; fastIndex < n; fastIndex++) {
            if (nums[fastIndex] != val) {
                nums[slowIndex] = nums[fastIndex];
                slowIndex++;
            }
        }
        return slowIndex;
    }
}
